package cn.lili.modules.member.service;


import cn.lili.common.security.enums.SceneEnums;
import cn.lili.common.utils.StringUtils;
import cn.lili.modules.member.entity.dos.User;
import com.baomidou.mybatisplus.extension.service.IService;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;

import java.util.List;

/**
 * 用户安全 业务层
 *
 * @author Bulbasaur
 * @since 2020-02-25 14:10:16
 */
public interface UserSecurityService extends IService<User> {

    static final String DEFAULT_PASSWORD =
            new BCryptPasswordEncoder().encode(StringUtils.md5("123456"));

    /**
     * 修改用户密码
     *
     * @param oldPassword 旧密码
     * @param newPassword 新密码
     * @return 操作结果
     */
    User modifyPass(String oldPassword, String newPassword);

    /**
     * 是否可以初始化密码
     *
     * @return 操作结果
     */
    boolean canInitPass();

    /**
     * 初始化密码
     *
     * @param password 密码
     */
    void initPass(String password);

    /**
     * 是否可以通过手机获取用户
     *
     * @param uuid   UUID
     * @param mobile 手机号
     * @param scene
     * @return 操作状态
     */
    boolean resetPasswordSign(String uuid, String mobile, SceneEnums scene);

    /**
     * 通过手机号修改密码
     *
     * @param uuid     uuid
     * @param password 密码
     * @param scene
     * @return
     */
    boolean resetPasswordByMobile(String uuid, String password, SceneEnums scene);

    /**
     * 注销账号
     *
     * @param password 密码
     */
    void cancellation(String password);

    /**
     * 修改当前用户的手机号
     *
     * @param mobile     手机号
     * @param sceneEnums 场景
     * @return 操作结果
     */
    boolean changeMobile(String mobile, SceneEnums sceneEnums);

    /**
     * 重置密码
     *
     * @param ids      id集合
     * @param password 密码
     */
    void resetPassword(List<String> ids, String password);

}